/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package PanelesDeTrabajo;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author GoLiATh
 */
public class VisorDePedidos extends JPanel implements MouseListener, ActionListener
{
    private JTable tabla;
    private DefaultTableModel modelo;
    //private JLabel datosLabel;
    private JScrollPane scroll;
    private JPanel panelBotones;
    private JButton despacharPedido;
    private int filaTabla;
    private int columnaTabla;
    private Date hora;
    private Random random;
    //private JList lista;
    //private DefaultListModel modelo;
    //private ArrayList<InformacionComida> infoComida = new ArrayList<InformacionComida>();

    public VisorDePedidos() 
    {
        this.setLayout(new BorderLayout());
        this.panelBotones = new JPanel();
        this.panelBotones.setLayout(new FlowLayout());
        this.hora = new Date();
        this.random = new Random();
        
        this.modelo = new DefaultTableModel()
        {
            public boolean isCellEditable(int row, int column) //Las celdas no son editables
            {
                if (column>=0 && column<=5)
                {
                    return false;
                }
            return true;
            }
        };
        this.tabla = new JTable(modelo);
        
        this.modelo.addColumn("Nombre");
        this.modelo.addColumn("Precio ($)");
        this.modelo.addColumn("Hora");
        this.modelo.addColumn("N° Mesa");
        this.modelo.addColumn("Estado");
        
        this.scroll = new JScrollPane(tabla);
        this.scroll.setViewportView(tabla);
        inicializarTabla();
        this.tabla.getTableHeader().setReorderingAllowed(false);
        
        //this.despacharPedido = new JButton("Despachar Pedido");
        
        //this.datosLabel = new JLabel("Nombre                                                                Precio ($)                 Hora                N° Mesa       Estado");
        //this.datosLabel.setFont(new Font("Comic Sans", 0, 14));
        
        //String[] datos = {"Cazuela de ave                                                                                  3000", "Pure con Carne                                                                                  2500", "Pescado Frito                                                                                     4500"};
        //this.lista = new JList(datos);
        //this.lista.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        //this.lista.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        //this.scroll = new JScrollPane(lista);
        //this.scroll.setViewportView(lista);
        
        //this.lista.addMouseListener(this);
        //this.despacharPedido.addActionListener(this);
        
        //this.add(datosLabel, BorderLayout.NORTH);
        //this.add(scroll, BorderLayout.CENTER);
        //this.panelBotones.add(despacharPedido);
        
        agregarComida();
        
        this.tabla.addMouseListener(this);
        this.add(scroll, BorderLayout.CENTER);
        this.add(this.panelBotones, BorderLayout.SOUTH);
    }
    
    
    
    /**
     * Inicializamos la tabla vacía y con 24 filas por rellenar, predeterminadamente.
     */
    public void inicializarTabla()
    {
        for (int i=0; i<24; i++)
        {
            Object[] fila = new Object[2];
            fila[0] = "";
            fila[1] = "";
            this.modelo.addRow(fila);
        }
//        this.tabla.setEnabled(false);
    }
    
    @Override
    public void mouseClicked(MouseEvent e) 
    {
        if (e.getClickCount() == 1)
        {
            int fila = tabla.rowAtPoint(e.getPoint()); //Obtenemos la fila donde se ha hecho click
            int colu = tabla.columnAtPoint(e.getPoint()); //Obtenemos la columna dodne se ha hecho click
            setFilaTabla(fila);
            setColumnaTabla(colu);
        }
    }

    @Override
    public void mousePressed(MouseEvent e) 
    {
        
    }

    @Override
    public void mouseReleased(MouseEvent e) 
    {
        
    }

    @Override
    public void mouseEntered(MouseEvent e) 
    {
        
    }

    @Override
    public void mouseExited(MouseEvent e) 
    {
        
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        Object click = e.getSource();
        
        if (click == despacharPedido)
        {
//            Object nombre = this.modelo.getValueAt(this.filaTabla, 0);
//            Object precio = this.modelo.getValueAt(this.filaTabla, 1);
//            System.out.println(nombre + " " +precio);
        }
    }
    
    
    /**
     * Revisamos si la tabla de despachos está vacía o está llena.
     * @return true = queda espacio, false = está llena.
     */
    
//    public boolean quedaEspacio()
//    {
//        for (int i=0; i<this.tabla.getRowCount(); i++)
//        {
//            Object nombre = this.modelo.getValueAt(i, 0); //Obtenemos el nombre de comida de la fila "i", columna "0"
//            Object precio = this.modelo.getValueAt(i, 1); //Obtenemos el precio de la fila "i", columna "1"
//            
//            if (nombre.equals("") && precio.equals("")) //Revisamos si la fila actual está vacía o no
//            {
//                return true; //Queda espacio
//            }
//        }
//        return false; //Está lleno
//    }
    
    /**
     * Agregamos filas nuevas según sea necesario, en caso de llenar la tabla y querramos agregar más despachos.
     * @param platos 
     */
//    public void agregarFilasTabla(int platos)
//    {
//        if (!quedaEspacio()) //Si está lleno, necesitará más espacio
//        {
//            int nuevoTotalFilas = this.tabla.getRowCount() + platos; //Inicializamos el total de filas antiguo
//            
//            for (int i=this.tabla.getRowCount(); i<nuevoTotalFilas; i++) //Contamos desde el ultimo plato hasta el futuro numero de platos
//            {
//                Object[] filaNueva = new Object[2]; //Creamos los bloques para la fila
//                filaNueva[0] = ""; //Asignamos espacio vacío para nombre
//                filaNueva[1] = ""; //Asignamos espacio vacío para precio
//                this.modelo.addRow(filaNueva); //Agregamos la fila nueva a la tabla de despachos
//            }
//            
//        }
//    }
    
    /**
     * Actualizar la tabla una vez que ha sido agrandada.
     */
//    public void actualizarTabla()
//    {
//        //AQUI LLAMAMOS A LAS FUNCIONES "quedaEspacio()" Y "agregarFilasTabla"
//        //PARA AGRANDAR LA TABLA EN CASO DE FALTAR ESPACIO PARA REGISTRAR DESPACHOS.
//    }
//    
    public void agregarComida()
    {
        modelo.setValueAt("Puré con Carne", 0, 0);
        modelo.setValueAt("4000", 0, 1);
        modelo.setValueAt("Despachado", 0, 4);
        modelo.setValueAt("Tallarines c/salsa a la bolognesa", 1, 0);
        modelo.setValueAt("2500", 1, 1);
        modelo.setValueAt("Pescado Frito", 2, 0);
        modelo.setValueAt("3500", 2, 1);
        modelo.setValueAt("Plateada c/papas fritas", 3, 0);
        modelo.setValueAt("5000", 3, 1);
        modelo.setValueAt("Ensalada César", 4, 0);
        modelo.setValueAt("1500", 4, 1);
        
        for (int i=0; i<5; i++)
        {
            modelo.setValueAt(""+hora.getHours()+":"+hora.getMinutes()+":"+hora.getSeconds(), i, 2);
            modelo.setValueAt(""+random.nextInt(20), i, 3);
        }
    }
    
    public int getFilaTabla()
    {
        return this.filaTabla;
    }
//    
    public void setFilaTabla(int filaTabla)
    {
        this.filaTabla = filaTabla;
    }
    
    public int getColumnaTabla()
    {
        return this.columnaTabla;
    }
    
    public void setColumnaTabla(int columnaTabla)
    {
        this.columnaTabla = columnaTabla;
    }
    
//    public void agregarComida(InformacionComida comida)
//    {
//        this.infoComida.add(comida);
//    }
    
}
